const qs=require('querystring')
module.exports=()=>{
    return async (ctx,next)=>{
        //如果请求的是post方法就使用下面的方法
        if(ctx.method==='POST'||ctx.method==='PUT'){
           let body=await new Promise((res,rej)=>{
                //定义空字符串载体
                let str='';
                //post请求是二进制流的方式发送的
                //我们可与监听发送的时间即data事件
                //chunk就是流的部分
                ctx.req.on('data',chunk=>{
                    //拼接代码块
                    str+=chunk
                })
                ctx.req.on('end',()=>{
                    //post请求结束的时间
                    /**
                     * form=>username=zs&pwd=123=>querystring==>application/x-www-form-urlenceded
                     * axios=>{username:zs,pwd:123}=>Json.parse()=>application/json
                     */
                    if(ctx.headers['content-type']==='application/x-www-form-urlencoded'){
                        res(qs.parse(str))
                    }else{
                        res(JSON.parse(str))
                    }
                })
           })
           //将body加载到ctx.request.body 供后序post请求接口拿数据
           ctx.request.body=body;
           await next()
        }else{
            //get请求直接往下走
            await next()
        }
    }
}